前面有提到在進行將multi-frame dicom裡的圖片取出來時,需要在openjdk內加入opencv函式庫,如果是windows開發環境需要加入opencv.dll,linux環境則是需要加入libopencv_java.so。
因此如果想將服務打包成docker,不能像前一篇一樣使用一般的openjdk,需要用含有opencv函式庫的openjdk。
之前開發時有在Docker hub上搜尋有沒有善心人士提供類似的openjdk,找了一圈都沒找到,只好自己來寫了。
容器化multi-frame dicom轉換服務需要遵循以下步驟:
需要先新增一個Dockerfile檔案,並在同個目錄下放入libopencv_java.so(可從Dcm4chee的Github上下載)
含有opencv函式庫的openjdk Dockerfile
FROM ubuntu:18.04
RUN apt-get update
RUN apt-get install -y ant
RUN apt-get install -y openjdk-11-jdk
ARG JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
ENV JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
RUN echo $JAVA_HOME
RUN java -version
ADD ./libopencv_java.so /usr/lib/libopencv_java.so
修改Dockerfile後執行docker build指令
docker build -t openjdkwithopencv .
將原本使用的openjdk抽換成openjdkwithopencv(含有opencv函式庫的openjdk)
FROM openjdkwithopencv
COPY ./target/*.jar /Documents/docker/demo.jar
WORKDIR /Documents/docker
RUN sh -c 'touch demo.jar'
ENTRYPOINT ["java","-jar","demo.jar"]
再執行docker build指令即可將服務打包成image
docker build -t dicomparsetest .
docker執行服務
docker run -p ${host port}:${container port} image_name
執行後就能使用容器化的multi-frame dicom轉換服務了!也可以直接將libopencv_java.so加到Springboot服務的image裡,只需要改寫Dockerfile即可。